home *** CD-ROM | disk | FTP | other *** search
/ Over 1,000 Windows 95 Programs / Over 1000 Windows 95 Programs (Microforum) (Disc 1).iso / 0901 / chkfiles.txt < prev    next >
Encoding:
Text File  |  1997-04-12  |  37.4 KB  |  657 lines

  1. CHKFILES
  2. Version 1.3a
  3. by Ron V. Webber
  4. Release date: August 17, 1996
  5. http://www.lightlink.com/ym
  6. Copyright 1996, Stochastic Systems
  7.  
  8. What is CHKFILES?
  9.  
  10. CHKFILES is a program that creates a special file in every directory that you
  11. select (which could be every directory on your hard drive).  This file, which
  12. is named CHKFILES.CHK, contains the name, time, date, size, and checksum of
  13. every file in the directory.  On subsequent runs, if the CHKFILES.CHK file
  14. already exists in a directory being checked, all files will be checked and the
  15. CHKFILES.CHK file will be updated.  You will be informed of every new path
  16. where a new CHKFILES.CHK file has been created, and, for every old path, you
  17. will be informed of every new file in the path, every file that has been
  18. deleted from this path, every file that has been changed (change in time
  19. and/or date and/or size), and any files that haven't changed time, date, or
  20. size but have a different checksum (bad files).  You can select paths either
  21. recursively (where selecting "C:\" will select every path on partition C) or
  22. non-recursively (where selecting "C:\" will only select the root path of
  23. partition C).
  24.  
  25. Since the CHKFILES.CHK file is stored at the path level, it remains valid even
  26. if you move it and all the files to another path.  The CHKFILES.CHK file is in
  27. pure ASCII format, so you can print it or edit it or use it for other
  28. purposes.
  29.  
  30. ==========================================
  31.  
  32. Who can use CHKFILES?
  33.  
  34. CHKFILES is released as shareware and is licensed for individual use.
  35. Individuals may use CHKFILES for evaluation on their personal computers.  If
  36. they keep using it, they are expected to pay for it.  (See the final section,
  37. "How do I pay for CHKFILES".)
  38.  
  39. Business, Commercial, Educational, Institutional, Corporate, or Government use
  40. of this version of CHKFILES is not allowed.  Contact Stochastic Systems if you
  41. wish to include a special version of CHKFILES with some commercial product.
  42. The only exception to this is that venders of shareware programs may include
  43. the CHKFILES.EXE program and this text file as a shareware package being
  44. distributed.  This means that you can include the CHKFILES package on a disk
  45. of other shareware that you are selling, but you can not use CHKFILES as a
  46. file checking program to check for corruption in the files on the disk of
  47. shareware that you are selling.
  48.  
  49. CHKFILES is distributed "AS-IS".  No warrantee is expressed or implied,
  50. including fittness for any purpose.  Stochastic Systems will not be
  51. responsible for any damage caused by the use, misuse, or abuse of CHKFILES.
  52.  
  53. ==========================================
  54.  
  55. Why should I use CHKFILES?
  56.  
  57. Do you run your system with VERIFY turned OFF to save time?  When you do a
  58. tape backup, do you leave the auto-compare turned off?  If you answered yes to
  59. these questions, then you probably can't be bothered with a utility that, if
  60. your system is working 100% perfectly, may be just a waste of time.  BUT...
  61. if you would rather have some peace of mind, read on!
  62.  
  63. Situation 1a: You have a beautifully designed Summer Solstice Card on your
  64. computer that you use every year during that hurried summer holiday season.
  65. Sometime in August, after the holidays are over, this file is corrupted by
  66. that game you downloaded, tried once, and then erased.  Since you won't need
  67. Solstice Cards until next June, you don't notice the corruption.  You do your
  68. daily backups, your weekly backups, and your monthly backups.  Eventually,
  69. this corrupted file gets backed up to all of your tapes.  Next June, when you
  70. go to mail merge your database with your wonderful card, you notice the
  71. corruption.  You search all of your tapes and disks, and all you can find is
  72. the corrupted file.  Too bad you didn't have any way to know that it had been
  73. corrupted before you overwrote all your good backup copies!  If you had used
  74. CHKFILES at least once before the file had been corrupted, then the first time
  75. you used it after the file had been corrupted it would have warned you about
  76. it, in time to retrieve a good version from your backup tape.
  77.  
  78. Situation 1b: Instead of being corrupted, the file was somehow deleted.
  79. CHKFILES, by keeping track of what files are supposed to be in the directory,
  80. would tell you that the file had been deleted the next time you ran it.
  81.  
  82. Situation 2a: While you were away from your desk at work, your boss, needing to
  83. write a quick note, used your computer to type in and print out a message to
  84. the accountant about how wonderful your work was.  The file is accidentally
  85. stored deep inside the directory that holds all of your fonts.  (You happened
  86. to be working on font editing before you were called away from your desk, and
  87. your boss couldn't be bothered to change directories before he saved the note.)
  88. Without CHKFILES, you never would have found this note.  With CHKFILES, you see
  89. that one of the new files on your computer is a text file inside the font
  90. directory.  That looks strange, so you look at the file and learn that now
  91. would be a great time to ask for a raise!
  92.  
  93. Situation 2b: Instead of being a file that you didn't expect to be there, it
  94. is a file that you wrote containing important client information, but you
  95. forgot where you stored it.  By using CHKFILES, you can get a list of all the
  96. new files on your computer and easily find what you need.
  97.  
  98. ==========================================
  99.  
  100. How do I use CHKFILES?
  101.  
  102. CHKFILES.EXE is a self-contained program.  It runs under Windows 3.1 and
  103. higher.  It runs under Windows 95, though it only uses the short versions of
  104. file names.  (If you want a version that uses the long file names, send me
  105. money so I can upgrade my compiler.) The only external file that must be in
  106. the same directory is the CHKFILES.PTH file, which is created by the CHKFILES
  107. program when you check the "Save Paths" box.  To run CHKFILES, either use the
  108. "Run" function in program manager, double-click on it from file manager, or
  109. assign it to a program group in program manager.
  110.  
  111. When CHKFILES runs, it first looks for a CHKFILES.PTH file in the same path.
  112. If it finds this file, it will attempt to open it and read the last paths and
  113. settings that were used.  If there is no CHKFILES.PTH file, which there won't
  114. be the first time you run CHKFILES, the program will come up with no paths
  115. selected.
  116.  
  117. If you want to save the paths that you select so that they will be there the
  118. next time you run CHKFILES, simply check the "Save Paths" box before you click
  119. on "Begin".
  120.  
  121. If you want to select every path on your C drive, select the C drive in the
  122. drive select box (upper left), click on the [ .. ] entry in the directory select
  123. box until the root directory is displayed, and then click on the "Add Path"
  124. button.  An entry for "C:\" should appear in paths list box.  Make sure that
  125. the "Recursive" box is checked.
  126.  
  127. When you change drives in the drive select box, the directory box will be
  128. updated to show the subdirectories that are in the current path on that drive.
  129. The current path is shown at the top of the screen.  The "Add Path" button
  130. adds the current path to the path list box.  If the recursive box is checked,
  131. any path that is already included inside another path that is already in the
  132. path list box will be removed from the path list box.  Duplicate paths are
  133. also removed.  Paths are shown sorted alphabetically.
  134.  
  135. If you click on the recursive box when it is not checked, it will become
  136. checked and any now-redundant paths will be removed from the list box.  If you
  137. click on the recursive box when it is checked, it will become clear and all
  138. paths in the list box will be automatically expanded to show all paths inside
  139. of them.  This could take a few seconds if you have many paths on your hard
  140. drive(s).  If you have too many paths on your hard drive, and the list box
  141. fills up, you will receive an error message saying that the list box is full.
  142. This means that not all of the paths could be expanded.  If you click "Begin"
  143. with this incomplete list in the list box, not all of the paths will be
  144. checked.  (In tests it required over 1000 nested directories to fill up the
  145. list box.) If you click on the recursive box again, the list will be
  146. compressed back down.  You can then click "Begin".  When you click "Begin"
  147. with the recursive box checked, the list of paths is expanded as they are
  148. being checked, and paths are removed from the list box once they are checked
  149. to make room as later paths are expanded.  This increases the number of paths
  150. that can be checked successfully.  If there are still too many paths to fit
  151. into the list box, you will get a message in the error box that will tell you
  152. which path was being expanded when the list box got full.  Checking will
  153. continue, but some paths may not be checked fully.  (A drive with over 2000
  154. nested directories checked perfectly, so this limitation probably won't matter
  155. much.)  Note that Windows 95 expands the allowable space for a list box, which
  156. is 32K in Windows 3.1x, which eliminates this limitation.
  157.  
  158. To remove a path from the path list, simply click on it.  Path delete is
  159. disabled while the path list is expanding through the use of the Recursive
  160. box.
  161.  
  162. If you want to quit from CHKFILES without checking any files, click the "Quit"
  163. button.  Any changes you made to the path list will be ignored.
  164.  
  165. Once you have all the paths set up the way you want them, click the "Begin"
  166. button.  If the "Save Paths" button is checked when you click on the "Begin"
  167. button, the paths and recursive state will be stored in the CHKFILES.PTH file
  168. located in the same path as the CHKFILES.EXE file.
  169.  
  170. If the "Recursive" box is checked when you click the "Begin" button, all the
  171. paths in the list box will be expanded to include all subdirectories.  Each
  172. subdirectory is expanded as it is being checked, so expansion doesn't delay
  173. the start of checking.
  174.  
  175. Before starting the actual file checking, the screen will be reconfigured to
  176. show five empty lists.  The caption of the window will show the name of the
  177. current path being checked.
  178.  
  179. The first list shows the new paths being checked and the new files in old
  180. paths.
  181.  
  182. The second list shows the names of all files deleted from old paths since
  183. CHKFILES was last run.
  184.  
  185. The third list shows the names of files that have changed since CHKFILES was
  186. last run.  If the line with the file name starts with "L!:", this means that
  187. the file has changed in length but not time or date.  If the file changed in
  188. time and/or date, the file name will be listed without any prefix.  (Normally,
  189. when a file changes at all the time changes.  It is somewhat unusual for a
  190. file to change in size without changing time or date, which is why this is
  191. flagged so you can know what is going on.)
  192.  
  193. The fourth list box shows the names of any files that are "bad".  A "bad" file
  194. is defined as one that has a changed checksum but not a changed time, date, or
  195. size.  "Bad" files will not be updated in the CHKFILES.CHK file, so if a file
  196. shows up as "bad", the old checksum of the file will remain in the
  197. CHKFILES.CHK file and not be updated to the checksum of the file as it now
  198. stands.  This is so you can restore this file from your backup (you DID keep a
  199. backup, didn't you?) and then re-run CHKFILES to make sure that your backup
  200. was good.  In the odd case where the file was changed intentionally somehow
  201. without changing the time, date, or size, and you don't want to do anything
  202. about it, then you will just have to ignore the "bad" reading.
  203.  
  204. The fifth list box shows any errors that happened during the running of the
  205. CHKFILES program.  This can include one of the other four list boxes running
  206. out of memory due to too many messages.  If the error list box ever runs out
  207. of memory due to too many error messages, you will be shown a message to that
  208. effect and then the checking procedure will abort.
  209.  
  210. During the check procedure, you can click on the "Abort" button.  This will
  211. abort the procedure after the current file is finished (which can take a few
  212. seconds if the current file is large).  The current path being worked on will
  213. not be updated.  If the current path is a new one, then no CHKFILES.CHK file
  214. will be created in this path.  If the current path is an old one, then the
  215. CHKFILES.CHK file will not be updated.  All previously checked paths will have
  216. been finished correctly.
  217.  
  218. When the last path is checked (or the abort button is pressed), the bottom of
  219. the screen will show some statistics, which will include the total number of
  220. files checked, the number of new files, number of deleted files, number of bad
  221. files, number of updated files, total number of bytes checked, time it took to
  222. check these files, number of bytes per second, and total number of paths
  223. checked.  Note that the total number of paths includes empty paths.  An empty
  224. path will not have a CHKFILES.CHK file put in it.  If a path has only a
  225. CHKFILES.CHK file in it (all other files having been deleted) the files that
  226. the CHKFILES.CHK file says should be there will be listed as having been
  227. deleted and the CHKFILES.CHK file will be deleted, leaving an empty directory.
  228.  
  229. When the "Done" button appears, all checking is finished.  Clicking on the
  230. "Done" button will end the program.
  231.  
  232. CHKFILES was written to be very "multi-tasking friendly".  You can run
  233. CHKFILES in the background, minimized if you like, while you run other things.
  234. You shouldn't be changing, creating, or deleting files in the paths that
  235. CHKFILES is looking at, but you can certainly play Solitaire while checking
  236. your files.  Since CHKFILES is using the hard disk controller quite a bit,
  237. any program you use that accesses the hard disk will be slowed down somewhat
  238. and will also slow down CHKFILES.
  239.  
  240. ==========================================
  241.  
  242. When should I use CHKFILES?
  243.  
  244. Any time you want to!  _I_ use CHKFILES at the following times:
  245.  
  246.  - Before a backup, so the backup will contain updated CHKFILES.CHK files and
  247. so I know if any files are bad or have been deleted so I can restore them
  248. before I do my backup and so I can see if there are any new files that I don't
  249. need and want to delete so they don't waste space on my backup.
  250.  
  251.  - After defragmenting, so I know if any files were corrupted by the process.
  252. I always backup before defragmenting, and I always run CHKFILES before backing
  253. up, so I know that the files weren't corrupt before defragmenting.
  254.  
  255.  - After moving large blocks of files from one partition to another or to a
  256. new hard drive.  When I bought a larger hard drive, I ran CHKFILES (and
  257. backup), then copied all the files over to the new hard drive, and then ran
  258. CHKFILES again before deleting the old hard drive.
  259.  
  260. When do other people use CHKFILES:
  261.  
  262. I don't know.  If you find an interesting use, please let me know!
  263.  
  264. What do other people like best about CHKFILES:
  265.  
  266. One user registered had inadvertantly deleted some important files from his
  267. system.  CHKFILES let him know that these files had been deleted, and he was
  268. able to restore them from his backup.
  269.  
  270. ==========================================
  271.  
  272. Will CHKFILES work under Windows '95?
  273.  
  274. Certainly!  Since CHKFILES is a 16 bit application it won't recognize long
  275. file names, but it will still check all of the files properly.  If you want a
  276. version of CHKFILES that will use the long files names, make sure you
  277. register.  If there is enough support, I will release a version that handles
  278. the long file names.  I have a preliminary version that works, but there are
  279. still a few limitations that will require an updated compiler to fix.  If I
  280. don't get enough support to do this, I may consider releasing this preliminary
  281. version only to those people who registered and request it.
  282.  
  283. If you use CHKFILES to check all the paths in your WINDOWS directory, you may
  284. notice that all the entries in your start menu have a CHKFILES.CHK file added
  285. to them.  This is because the start menu is stored in a directory structure
  286. which is normally filled with the links that point to the programs you want to
  287. run when you click on items in the start menu.  Since this is stored like any
  288. other directory structure, CHKFILES will check these link files and place a
  289. CHKFILES.CHK file in each path.  After running CHKFILES, the start menu will
  290. show these CHKFILES.CHK files in the menu.  If you want to remove these from
  291. the start menu you can simply set these files as Hidden.  There are many ways
  292. to do this:  You can use the explorer, the "Advanced" editing in the "Start
  293. Menu Programs" section of the "Taskbar Properties", or the old file manager.
  294. All you need to do is go into the subdirectories of the "Start Menu" directory
  295. (located in your Windows directory) and find all the CHKFILES.CHK files.  For
  296. each file select "properties" and then click on the "Hidden" box and then
  297. click on "Apply".  Hiding the CHKFILES.CHK file will only stop it from showing
  298. up in the Start menu, and maybe in the explorer.  It won't stop it from being
  299. found by CHKFILES and used to check the status of the other files in the
  300. directory.  Starting with version 1.3, CHKFILES now can find a hidden
  301. CHKFILES.CHK file.  The file will remain hidden even when it has been updated
  302. so you won't have to go back an hide it again.  If you remove all the other
  303. items from the directory then the CHKFILES.CHK file will be deleted the next
  304. time CHKFILES is run.  If you then add files back to that directory, a new
  305. CHKFILES.CHK file will be created which will not be hidden, so you will need
  306. to hide it again.
  307.  
  308. ==========================================
  309.  
  310. Why did I write CHKFILES?
  311.  
  312. Because I wanted a program that would do this sort of thing and I couldn't
  313. find one.  There may be some other program out there that does the exact same
  314. thing, but I don't know of one that works in exactly the same way.  I also
  315. wanted something simple to write that I could use to try out the shareware
  316. market.
  317.  
  318. A well-known anti-virus program from a software company in Washington does
  319. something like CHKFILES - it creates a small file in every path with checksums
  320. in it - but it didn't do this in the way I wanted it to, wouldn't give me the
  321. information I wanted, and I couldn't get it to do only the paths I wanted.  It
  322. also seemed to only calculate checksums on executable files, and I wanted to
  323. check all the files.  (It uses the checksums to see if an executable file has
  324. been modified by a virus.  I wanted to use checksums to see if files had been
  325. corrupted.)
  326.  
  327. Many years ago I attended a talk by a programmer who was describing his new
  328. backup program.  It was called the "GOOD" backup program, and he made a strong
  329. case about always doing a checksum of every file and checking each file before
  330. storing it to the backup.  He used the story of a corrupt file that was used
  331. only once a year not being discovered until it had been copied to all the
  332. backup disks, thus making recovery impossibly.  I bought a copy of his
  333. program, used it religiously, and was very glad every time it enabled me to
  334. find a corrupt file and recover from it.  This was for a different computer
  335. system, and the "GOOD" backup program was not a big seller, but it made a big
  336. impression on me.
  337.  
  338. When I started using Windows, I wanted the same sort of protection, but I
  339. couldn't find it.  I toyed with the idea of writing my own version of "GOOD",
  340. but since tape backup was so much more convenient, I decided to write CHKFILES
  341. to add the protection I wanted without having to rewrite the entire backup
  342. program.
  343.  
  344. The first version was done in Visual Basic version 3.  It worked, but it was
  345. slow doing the checksums on the files and had some problems with certain
  346. "unusual" date combinations.
  347.  
  348. I then moved the checksum routine to a DLL written in Turbo C++ 3.1, and that
  349. sped things up quite a bit.  (The checksum routine is now so fast on a modern
  350. computer that the slow part is reading the file off of the hard drive.  I was
  351. thinking of optimizing the checksum routine in assembly language, but that
  352. wouldn't make much difference.)
  353.  
  354. When I thought about releasing CHKFILES as shareware, I wanted it to be a
  355. self-contained executable without requiring any external DLL's.  For this
  356. reason I translated it into Turbo C++.  (I also wanted to have a project so I
  357. could learn Windows programming in C++.) I then updated to Borland C++ version
  358. 4.0, which allows the program to easily release time to other tasks when it is
  359. busy doing something complicated.  This allowed me to play Freecell while the
  360. files were being checked.
  361.  
  362. The concept and basic structure of CHKFILES seems very solid.  I have been
  363. using it on multiple machines for over 3 years now.  The C++ version also
  364. seems very solid, though there are a few areas that are not fully
  365. "idiot-proof".  See the next section.
  366.  
  367. ==========================================
  368.  
  369. How dangerous is CHKFILES:
  370.  
  371. I have taken many precautions to avoid potentially dangerous situations.  If a
  372. path already contains a file named CHKFILES.CHK, but it is not a file that was
  373. created by this program - say for some strange reason you saved your favorite
  374. apple pie recipe in a file of this name - you will get an error message that
  375. this path can't be processed and your pie recipe will not be touched.  (If
  376. your pie recipe file happens to be in the same format as a CHKFILES.CHK is
  377. supposed to be in, then it will get modified.)
  378.  
  379. If your hard drive is so full that it doesn't have room for the CHKFILES.CHK
  380. files, the program may crash, but it shouldn't do any damage (other than
  381. filling up what little space you had left).
  382.  
  383. The contents of the CHKFILES.CHK file that is being created or updated is kept
  384. in memory until the entire path is finished, and then the file is created and
  385. re-written.  If the system crashes during the path checking, the old
  386. CHKFILES.CHK file will remain intact.  If the system crashes during the short
  387. time that the CHKFILES.CHK file is being written, it is possible that a
  388. corrupt or incomplete CHKFILES.CHK file will be in the path.  In this case,
  389. this path may give an error message the next time you try to check it.  The
  390. corrupt CHKFILES.CHK file will not be deleted automatically, because the
  391. program doesn't know if this corrupt file is really a corrupt file or your pie
  392. recipe.  You would then have to manually delete this corrupt file and recheck
  393. that path.
  394.  
  395. There are limitations on the number of paths that you can check in one run of
  396. CHKFILES.  The paths are stored in a standard Windows list box, and these list
  397. boxes can't hold more than 32K of text.  Assuming 32 characters in the average
  398. path, this means you couldn't check more than 1000 paths in one run.  You
  399. could, however, run CHKFILES multiple times with different sets of paths.
  400. Only one user has ever reported hitting this limit, and he was using an older
  401. version of CHKFILES.  With version 1.3, the paths are expanded while they are
  402. being checked, and paths that have been checked are removed from the list to
  403. free up space.  If you had all 1000 subdirectories in the same directory, you
  404. would still have this limit.  If you had these directories nested within one
  405. another (a more likely situation) then you probably wouldn't hit this limit.
  406. Also note that Windows 95 expands the memory limit on list boxes so you
  407. probably won't see any limitations when running CHKFILES under Windows 95.
  408.  
  409. Because of the same listbox limitation, if you have too many new, changed,
  410. deleted, or bad files, the list boxes may overflow during checking.  (This is
  411. one reason when an entire path is new it only generates one line saying "All
  412. files in path X" rather than a line for each new file.) If, for example, you
  413. have thousands of picture files in multiple directories that have already been
  414. checked and have CHKFILES.CHK files in them, and then you run all of these
  415. picture files through a program that creates thumbnail files for each picture,
  416. you could end up with so many new files in old paths that the "new files" list
  417. box would fill up.  This _has_ happened to me!  In this case, the list box
  418. that filled up would stop accepting any more information and an error message
  419. would be added to the error list box stating that the "new files" list box was
  420. full (or whatever box happened to fill up).  Once this error message is added
  421. to the error list box, no more attempts are made to add information to the
  422. full list box, so you won't get multiple error messages about the same
  423. problem.  Checking will continue so that all the selected paths will be
  424. checked, and all you will lose is the notification about more files of the
  425. type that caused the list box to fill up.
  426.  
  427. ==========================================
  428.  
  429. What should I not bother complaining about:
  430.  
  431. CHKFILES was designed to be a self-contained executable.  As such, it doesn't
  432. use or need any external files (except the CHKFILES.PTH file to store the
  433. paths and all the CHKFILES.CHK files in the paths, but it creates these for
  434. you).  Because of this goal, CHKFILES does not use any of the currently
  435. fashionable "3D" buttons or other fancy stuff.  This is not because I couldn't
  436. figure out how to use such things.  Borland makes it very easy to use fancy
  437. looking controls, in fact it takes a little more work to get a plain dialog
  438. without the fancy features!  If there is enough demand for it (from paying
  439. customers) I could easily add such things.
  440.  
  441. CHKFILES was designed to be easy for ME to use.  I use a mouse to run it.  I
  442. realize that someone who tries to use the keyboard will have a very hard time
  443. of it.  Specifically, with the keyboard it is not possible to select
  444. individual items in the directory and paths list boxes.  Since I didn't want
  445. to have to double-click on items with the mouse to select them, that meant
  446. that keyboard use would be restricted.  Sorry.  (The earlier version in Visual
  447. Basic required double clicking, and I didn't like that.) Windows is hard
  448. enough to use with just a keyboard that I figure that not enough people will
  449. need to use the keyboard to make it worth while.  If this causes anyone real
  450. problems, please let me know.  I have some ideas on what to do about this, but
  451. if no one needs it, I won't bother with it.
  452.  
  453. ==========================================
  454.  
  455. What is in the future for CHKFILES:
  456.  
  457. CHKFILES is shareware.  This was my first venture into Windows-based shareware,
  458. though I have a different shareware program on another platform and have
  459. actually received some payments for it (though not that many).  (This other
  460. program, Rapsheet, is now available in Windows.)  I am not expecting to get
  461. rich from this program, but if I make enough I will keep supporting it and do
  462. some other programs.  My primary goal is to justify upgrading to Borland C++
  463. version 5.0.  If I get enough support to do this, then there will be a version
  464. 2.0 of CHKFILES that handles the long file names.  (The current version of
  465. CHKFILES can be recompiled in 32-bit mode and works just fine with long file
  466. names, but there are some bugs in the 32-bit libraries in Borland C++ version
  467. 4.0 that I haven't been able to work around yet.  If enough people register,
  468. the 32-bit version will be released.  If I don't get enough support, I will
  469. just keep the 32-bit version for my own use.)
  470.  
  471. There are some enhancements that I plan on adding to CHKFILES, and I will
  472. continue to fix bugs or limitations as they come up.  How much work I put into
  473. upgrades will depend on the response I get.  Some of the plans I have include
  474. adding things that happen when you click on files after the checksum phase is
  475. over (or possibly during it).  For instance, if you clicked on a file marked
  476. "Bad" you could get the option of marking the file as good and updating the
  477. CHKFILES.CHK file.  If you got an error saying that a CHKFILES.CHK file was
  478. corrupted so it couldn't process a path, you would get an option to delete the
  479. CHKFILES.CHK file and reprocess that path.  If you got an error due to an
  480. overflowing list box, it could pause for you to read all the list boxes and
  481. then clear their contents and continue.  If you have other things you would
  482. like, let me know.
  483.  
  484. ==========================================
  485.  
  486. How do I pay for CHKFILES:
  487.  
  488. If you like CHKFILES, use it and share it with your friends.  If you find that
  489. you use it regularly, I would expect you to register it.  The recommended
  490. registration fee is US$10.  If you are from outside the U.S., please make sure
  491. that your monetary instruments are easily cashable in the U.S..  Since
  492. CHKFILES is fully functional as it stands, there is no registration "key" that
  493. you need back from me.  (Sorry, the initial startup screen can't be disabled.)
  494. Maybe in the future, if there is an installed base of registered users out
  495. there, I will add some features that can only be activated by a key.  If this
  496. happens, I will contact you with your key and where you can get a copy of the
  497. updated file.  Because of this possibility, please send me some way to contact
  498. you (email preferred) and also let me know where you got your copy of CHKFILES
  499. so I know the best way to release updates so you can receive them.
  500.  
  501. If you like CHKFILES, but think you will wait for the Windows 95 version that
  502. uses long file names before you register, you may be in for a long wait.  If
  503. everyone felt that way, there would never be a Windows 95 version.
  504.  
  505. If you use CHKFILES and don't pay for it, and then later it saves you from
  506. losing something important, I would expect you to pay for it.
  507.  
  508. If you use CHKFILES and don't pay for it, and you find that it gives you
  509. pleasure and peace of mind every time CHKFILES tells you that all your files
  510. are safe after you do something like copy them over or defrag your hard drive,
  511. then I would expect that after a while that peace of mind would be worth
  512. paying for.
  513.  
  514. If you use CHKFILES and give it to your friends and brag about what a
  515. wonderful program it is, I would expect you to pay for it.  Then you could
  516. brag about what a wonderful person you are because you paid for what you used,
  517. and you could shame all of your friends into doing the same thing!
  518.  
  519. If you have never experienced that warm fuzzy feeling that comes from knowing
  520. that you have done a good thing, I would recommend that you pay for CHKFILES.
  521. It's cheap, as far as shareware goes, and if you get that fuzzy feeling then
  522. you can get it again by registering other shareware you use!  (If you don't
  523. get that fuzzy feeling, or don't like it, then you won't be out as much as you
  524. would be if you had registered a more expensive program!)
  525.  
  526. You may mail your money to:
  527.  
  528. Ron V. Webber
  529. Stochastic Systems
  530. P.O. Box 925
  531. Dryden, NY 13053 USA
  532.  
  533. Make your checks or money orders payable to "Stochastic Systems".
  534.  
  535. I can be reached by email at:  ym@lightlink.com
  536.  
  537. You can also reach me at my web page:  http://www.lightlink.com/ym
  538.  
  539. The web page has a link to the latest version of CHKFILES and also has links
  540. to any other shareware programs I may have released.
  541.  
  542. I am interested in knowing who is using CHKFILES.  If you find an interesting
  543. use that I didn't think of, let me know by email.  If you have sent me money,
  544. let me know that it is on the way.  If you find a bug or could recommend a new
  545. feature, let me know.  If you think it is stupid and a waste of your time,
  546. don't bother to let me know.
  547.  
  548. I would also be interested in hearing ideas for more projects, job offers,
  549. donations, praise, etc..  Sorry, no marriage proposals accepted.  (My wife
  550. wouldn't like that!)
  551.  
  552. ==========================================
  553.  
  554. Revision history:
  555.  
  556. Version 1.0 was released for about 2 hours and no one ever used it.
  557.  
  558. Version 1.0a corrected a minor bug that would cause the first subdirectory on
  559. any given partition to be skipped if you operated in Recursive mode.
  560.  
  561. Version 1.1 translated characters from DOS text to Windows ANSI text.  This
  562. would only show up on files with non-standard characters such as the one-half
  563. symbol.  (View this file in DOS edit and Windows notepad and see how the
  564. following symbols differ:╝╜╛⌐▒.  In Windows, they are 1/4, 1/2, 3/4, (C),
  565. and +/-.  In DOS they are line drawing graphic characters.) 
  566.  
  567. Version 1.2 changed how some of the internal disk routines worked, trying to
  568. eliminate any that don't work with Win32.  This is in preparation for a 32-bit
  569. version that will handle the long file names of 95 and NT.  This version also
  570. will recognize subdirectories and files that are marked "System" (but not
  571. those marked "Hidden"), which the previous versions would ignore.  Note that
  572. this still doesn't work with long file names since it is still a 16-bit
  573. application.  If I compile it as a 32-bit application, which I have done in
  574. unreleased tests, it works with long file names, but some other things don't
  575. work properly.  I will need to update my compiler before I can release a fully
  576. working 32-bit version.
  577.  
  578. Version 1.3 Changes:
  579.  
  580. Changed the way information was stored internally, resulting in a slightly
  581. smaller program than 1.2, even with more features!  The most visible change is
  582. that the path expansion when you click "Begin" is now done during the checking
  583. phase.  Previously, when you clicked "Begin", all the paths would expand
  584. first, and then the checking phase would start.  This caused a delay before
  585. checking started and meant that you couldn't check more paths than would fit
  586. into a list box.  By expanding paths as they are checked and removing checked
  587. paths from the list box, many more paths can be checked.  (If you have two
  588. directories, each with 500 subdirectories in them, the older version might not
  589. be able to fit all 1000 paths into the list box.  Version 1.3 will expand the
  590. first 500 subdirectories, check and remove each of them from the list box, and
  591. then have plenty of room to expand the second set of directories.  Expanding
  592. paths by clicking on the "Recursive" box will still have the original
  593. limitation, but it now has an error message telling you that not all paths
  594. could be expanded and that you should click the "Recursive" box again to
  595. compress the paths before clicking "Begin" to start checking.
  596.  
  597. Each path now ends in a final backslash.  Before, only root directories
  598. ("C:\") would have the final backslash.  This modification allows the paths to
  599. be sorted better and aids in the proper collapse of expanded path lists.  The
  600. CHKFILES.PTH file still stores the paths without the final backslash, except
  601. for root directories, in order to maintain compatibility with older versions.
  602.  
  603. Files which have a date after 2079 will now have their dates stored using the
  604. full four digits.  Previously, only the last two digits of the date would be
  605. stored in the CHKFILES.CHK file - 80 to 99 representing 1980 through 1999 and
  606. 0 to 79 representing 2000 through 2079.  It is possible to set the date on the
  607. computer as high as 2099, and if you had any file with such a date on it the
  608. program would always report that the file had changed.  For example, a file
  609. that thought it was created in 2083 would previously have the date recorded as
  610. "83", which would be confused with 1983.
  611.  
  612. If the CHKFILES.CHK file is marked "Hidden", it will still be found and
  613. updated while remaining hidden.  Previously, if the CHKFILES.CHK file was
  614. hidden, the program would not find it and would treat the path as a new one,
  615. though when it tried to create a new CHKFILES.CHK file in the path is would
  616. overwrite the hidden one and the new file would retain the hidden attribute
  617. of the older file, thus the CHKFILES.CHK file would remain hidden but the
  618. files would not be checked and the path would constantly be listed as new.
  619. This feature was added because of the way Windows '95 stores the task bar
  620. start menu.  The menu is stored as a nested directory structure  in the
  621. "Start Menu" directory (usually STARTM~1 in short file names).  Any files
  622. found inside this "Start Menu" directory will be shown in the start menu,
  623. and this includes the CHKFILES.CHK files.  Since you wouldn't normally want
  624. to see the CHKFILES.CHK files in your start menu, you can now make these
  625. files hidden (using the Explorer or File Manager) so that they won't show up
  626. on the start menu but will continue to protect the files in the start menu.
  627.  
  628. Version 1.3a corrected a bug that was reported by a user.  If you have a
  629. subdirectory whose first character is one of the following non-alphanumeric
  630. characters: !"#$%&'()+,- then when the recursive search would lock up, which
  631. could cause a general protection fault.  The reason for this is that the
  632. program always assumes that the first entry in the subdirectory list is the
  633. ".." sequence, which marks the way back up the directory tree.  Since the
  634. subdirectory list is a sorted list and the characters given above come
  635. before the "." character in the normal character set, this would stop the
  636. ".." entry from being the first one in the list.  The solution was to change
  637. the first entry from "[..]" to "<..>".  Since the "<" character comes before
  638. "[" in the character set, this solves the problem. 
  639.  
  640. ==========================================
  641.  
  642. Other products from Stochastic Systems:
  643.  
  644. RapSheet Time Logger.  Helps you to keep track of how much time you spend
  645. doing various tasks.  It can be used to determine a breakdown of your time
  646. spent doing various types of things on your computer, which is useful (and
  647. required) for those who plan on deducting some of their computer expense from
  648. their taxes.  It can also be used to keep track of any other time based
  649. activities.  Available NOW from the Stochastic Systmes home page and from
  650. major shareware distributors.
  651.  
  652. Coming Soon (maybe): The Too Many Notes Tune Editor.  At the forefront of CAMP
  653. (Computer Aided Music Performance).  Allows you to create musical performances
  654. that sound exactly the way you would have played them if you had the talent to
  655. play them that way.  Requires the ability to read music and a sense of rhythm,
  656. but not necessarily at the same time (or by the same person).
  657.